草庐IT

Java HotSpot 枚举开销

全部标签

java - 枚举类型的 Emma 覆盖率

我正在运行EclEmma,它是Eclipse的Emma插件,覆盖率报告仅显示我定义的Enum的部分覆盖率,即使它显示Enum中唯一的值被覆盖。我假设支持Enum的隐含方法存在覆盖差距,但我不太确定。例如,对于这个Enum,EclEmma以绿色突出显示所有内容,但包声明除外:packagecom.blah;publicenumUserRole{HAS_ACCESS}如果我调出类(class)的覆盖范围详细信息,我会看到:我的问题是,使用EclEmma对我的Enum类进行100%覆盖的最佳方法是什么? 最佳答案 您看到的是由于枚举而生成

具有多个值的Java枚举valueOf()?

我在Java中使用Enums时遇到问题。我已阅读有关将值参数分配给枚举的文档。但是,我的问题是多个值怎么办,有可能吗?这是我想要实现的:我有一个语言枚举。每种语言都由其名称和一些较短的别名表示(并非总是,而且别名的数量并不总是相同)这是一个例子:publicenumLanguage{English("english","eng","en","en_GB","en_US"),German("german","de","ge"),Croatian("croatian","hr","cro"),Russian("russian")}我可以像这样定义一个枚举并通过调用Language.valu

具有多个值的Java枚举valueOf()?

我在Java中使用Enums时遇到问题。我已阅读有关将值参数分配给枚举的文档。但是,我的问题是多个值怎么办,有可能吗?这是我想要实现的:我有一个语言枚举。每种语言都由其名称和一些较短的别名表示(并非总是,而且别名的数量并不总是相同)这是一个例子:publicenumLanguage{English("english","eng","en","en_GB","en_US"),German("german","de","ge"),Croatian("croatian","hr","cro"),Russian("russian")}我可以像这样定义一个枚举并通过调用Language.valu

Java:使用反射实例化枚举

假设你有一个像这样的文本文件:my_setting=ONsome_method=METHOD_Averbosity=DEBUG...您希望相应地更新相应的对象:Settingmy_setting=ON;Methodsome_method=METHOD_A;Verbosityverbosity=DEBUG;...所有这些都是不同类型的枚举。我想要一种通用的方法来实例化枚举值。也就是说,在运行时使用反射,并且事先不知道对象的枚举类型。我会想到这样的事情:for(ConfigLineline:lines){String[]tokens=line.string.split("=",2);Str

Java:使用反射实例化枚举

假设你有一个像这样的文本文件:my_setting=ONsome_method=METHOD_Averbosity=DEBUG...您希望相应地更新相应的对象:Settingmy_setting=ON;Methodsome_method=METHOD_A;Verbosityverbosity=DEBUG;...所有这些都是不同类型的枚举。我想要一种通用的方法来实例化枚举值。也就是说,在运行时使用反射,并且事先不知道对象的枚举类型。我会想到这样的事情:for(ConfigLineline:lines){String[]tokens=line.string.split("=",2);Str

Java 线程创建开销

传统智慧告诉我们,大容量企业Java应用程序应优先使用线程池,而不是生成新的工作线程。java.util.concurrent的使用使这变得简单。但是,确实存在不适合线程池的情况。我目前正在研究的具体示例是使用InheritableThreadLocal,它允许将ThreadLocal变量“传递”到任何生成的线程。这种机制在使用线程池时会中断,因为工作线程通常不是从请求线程产生的,而是预先存在的。现在有一些方法可以解决这个问题(可以显式传入线程局部变量),但这并不总是合适或实用的。最简单的解决方案是按需生成新的工作线程,并让InheritableThreadLocal完成其工作。这让我

Java 线程创建开销

传统智慧告诉我们,大容量企业Java应用程序应优先使用线程池,而不是生成新的工作线程。java.util.concurrent的使用使这变得简单。但是,确实存在不适合线程池的情况。我目前正在研究的具体示例是使用InheritableThreadLocal,它允许将ThreadLocal变量“传递”到任何生成的线程。这种机制在使用线程池时会中断,因为工作线程通常不是从请求线程产生的,而是预先存在的。现在有一些方法可以解决这个问题(可以显式传入线程局部变量),但这并不总是合适或实用的。最简单的解决方案是按需生成新的工作线程,并让InheritableThreadLocal完成其工作。这让我

java - 为什么Java允许将空值分配给枚举?

这更像是一个设计问题,所以没有代码。如果您希望我这样做,我可以发布创建Enum并将其分配给null的代码。:))我最近一直在思考这个问题,但找不到一个好的理由。Enum常量隐含地是static和final。枚举的意思是说-“我可以取一个存在于我身上的常数的值”。为什么允许Enum有一个null值?为什么不将Enum的值隐式默认为Enum.DEFAULT或Enum.None?这不是比允许Enum为null更好的方法吗? 最佳答案 首先null表示不存在实例。提供像DEFAULT或NONE这样的默认常量会改变这个含义。其次,为什么你需要

java - 为什么Java允许将空值分配给枚举?

这更像是一个设计问题,所以没有代码。如果您希望我这样做,我可以发布创建Enum并将其分配给null的代码。:))我最近一直在思考这个问题,但找不到一个好的理由。Enum常量隐含地是static和final。枚举的意思是说-“我可以取一个存在于我身上的常数的值”。为什么允许Enum有一个null值?为什么不将Enum的值隐式默认为Enum.DEFAULT或Enum.None?这不是比允许Enum为null更好的方法吗? 最佳答案 首先null表示不存在实例。提供像DEFAULT或NONE这样的默认常量会改变这个含义。其次,为什么你需要

Java 在给定枚举值的情况下获取枚举名称

在给定值的情况下,如何获取JavaEnum类型的名称?我有以下适用于特定枚举类型的代码,我可以让它更通用吗?publicenumCategory{APPLE("3"),ORANGE("1"),privatefinalStringidentifier;privateCategory(Stringidentifier){this.identifier=identifier;}publicStringtoString(){returnidentifier;}publicstaticStringgetEnumNameForValue(Objectvalue){Category[]values=